extends HItemFactory

## ItemFactory的扩展实现
## 负责加载JSON配置文件并构建物品原型树
## 继承自HItemFactory，专门处理项目特定的物品配置

## 重写load_prototree函数
## 从JSON文件加载物品配置数据
func load_prototree():
	var json_path = "res://resource/data/items.json"
	
	# 检查文件是否存在
	if not FileAccess.file_exists(json_path):
		print("警告: 物品配置文件不存在: ", json_path)
		return
	
	# 读取JSON文件
	var file = FileAccess.open(json_path, FileAccess.READ)
	if file == null:
		print("错误: 无法打开物品配置文件: ", json_path)
		return
	
	var json_text = file.get_as_text()
	file.close()
	
	# 解析JSON
	var json = JSON.new()
	var parse_result = json.parse(json_text)
	
	if parse_result != OK:
		print("错误: JSON解析失败，错误代码: ", parse_result)
		print("错误信息: ", json.get_error_message())
		print("错误行号: ", json.get_error_line())
		return
	
	var config_data = json.data
	
	# 验证JSON结构
	if not config_data.has("items"):
		print("错误: JSON文件缺少'items'字段")
		return
	
	# 加载物品数据到原型树
	prototree = config_data["items"]
	
	print("成功加载 ", prototree.size(), " 个物品配置")
	
	# 验证物品配置的完整性
	_validate_item_configs()

## 验证物品配置的完整性
## 检查每个物品的继承关系和必要字段
func _validate_item_configs():
	var validation_errors = []
	
	for item_id in prototree.keys():
		var item_data = prototree[item_id]
		
		# 检查必要字段
		if not item_data.has("inherit"):
			validation_errors.append("物品 '%s' 缺少 'inherit' 字段" % item_id)
			continue
		
		# 检查继承类型是否注册
		var inherit_type = item_data["inherit"]
		if not item_classes.has(inherit_type):
			validation_errors.append("物品 '%s' 的继承类型 '%s' 未注册" % [item_id, inherit_type])
		
		# 检查基础字段
		var required_fields = ["id", "name", "type"]
		for field in required_fields:
			if not item_data.has(field):
				validation_errors.append("物品 '%s' 缺少必要字段 '%s'" % [item_id, field])
	
	# 输出验证结果
	if validation_errors.size() > 0:
		print("物品配置验证发现错误:")
		for error in validation_errors:
			print("  - ", error)
	else:
		print("物品配置验证通过")

## 获取特定类型的所有物品
## @param item_type: 物品类型过滤条件
## @return Array: 符合条件的物品ID数组
func get_items_by_type(item_type: String) -> Array:
	var filtered_items = []
	
	for item_id in prototree.keys():
		var item_data = prototree[item_id]
		if item_data.get("type", "") == item_type:
			filtered_items.append(item_id)
	
	return filtered_items

## 获取所有投掷武器的ID列表
## @return Array: 所有投掷武器的ID数组
func get_throwable_weapons() -> Array:
	var throwable_weapons = []
	
	for item_id in prototree.keys():
		var item_data = prototree[item_id]
		if item_data.get("inherit", "") == "throwable":
			throwable_weapons.append(item_id)
	
	return throwable_weapons
